/*
 * Implementacion de Simbolo para la Tabla de Simbolos para el lenguaje C Minus.
 * 
 * Basado en el proyecto descrito en: 
 * Louden, K. (1997). Compiler Construction: Principles and Practice. Boston: PWS.
 * 
 * @ Project: Compiler
 * @ File Name: Symbol.java
 */
package cml.analyzing;

import cml.Type;
import cml.parsing.tree.*;

public class Symbol {
	
	private DeclNode node;
	
	/*
	 * Constructor de la clase.
	 * 
	 * @param	node	nodo registrado en la tabla
	 */
	public Symbol(DeclNode node) {
		
		this.node = node;
	}
	
	/*
	 * Regresa el nombre del simbolo
	 * 
	 * @return	nombre
	 */
	public String getName() {
		
		return this.node.getName();
	}
	
	/*
	 * Regresa el numero de linea donde se encuentra el simbolo en el codigo fuente
	 * 
	 * @return	numero de linea
	 */
	public int getLineNo() {
		
		return this.node.getLineNo();
	}
	
	/*
	 * Regresa el tipo de dato asociado al simbolo
	 * 
	 * @return	tipo de dato
	 */
	public Type getType() {
		
		if(this.node instanceof VarDeclNode) {
			
			VarDeclNode temp = (VarDeclNode)this.node;
			TypeNode type = (TypeNode)temp.getChild(temp.TYPE);
			return type.getType();
		}
		else if(this.node instanceof FuncDeclNode) {
			
			FuncDeclNode temp = (FuncDeclNode)this.node;
			TypeNode type = (TypeNode)temp.getChild(temp.TYPE);
			return type.getType();
		}
		else {
			
			ParamNode temp = (ParamNode)this.node;
			TypeNode type = (TypeNode)temp.getChild(temp.TYPE);
			return type.getType();
		}
	}
}
